<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>面相对象-类与对象</h1>
    <h2>抽象</h2>
    <p>提取事务有用的属性和行为。</p>
    <p>属性 -> 属性</p>
    <p>行为 -> 方法</p>
    <p>提取的结果形成“类”。</p>
    <h2>类与对象</h2>
    <ul>
        <li>类：描述客观存在的事务。</li>
        <li>对象：又称之为实例。客观事务存在的独特个体。</li>
        <li>使用new 构造方法|类名() 的方法来创建类的实例（对象）。</li>
    </ul>
    <h2>作业</h2>
    <dl>
        <dt>选做</dt>
        <dd>定义一个矩形类。构造方法传入长和宽。</dd>
        <dd>矩形类中定义方法：返回面积。</dd>
        <dd>矩形类中定义方法：返回周长。</dd>
    </dl>
    <script>
        // 学生：独特存在的事务。提取成学生类。
        // 类名：使用大驼峰命名规则
        // Student()：构造方法，该构造方法允许传入三个参数（用于初始化对象）
        function Student(name,age,sex) {

            // 属性
            this.name = name;

            this.age = age;

            this.sex = sex;

            // 行为 -> 方法
            this.study = function() {
                if (this.sex == "男") {
                    console.log(this.age + "岁的" + this.name + "正在奋力地学习理科知识。")
                } else {
                    console.log(this.age + "岁的" + this.name + "正在奋力地学习文科知识。")
                }
            }
        }

        let lbj = new Student("罗佰君",20,"男");
        lbj.name = "张三";
        lbj.study();

        let yxy = new Student("杨晓燕",20,"女");
        yxy.study();

        let obj = new Object();
        obj.name = "xxx";

        // 判断一个对象，是不是类的实例
        // 所有对象（包含数组），都是Object类的实例。
        console.log(lbj instanceof Object);
        console.log([] instanceof Object);
    </script>
</body>
</html>